﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;


namespace LectorExpediciones
{
    public partial class ControlExpediciones : UserControl
    {
        private List<Expedicion> listaExpediciones;
        private ColumnSorter.ListViewColumnSorter lvwColumnSorter;


        public ControlExpediciones()
        {
            listaExpediciones = new List<Expedicion>();
            
            InitializeComponent();
            lvwColumnSorter = new ColumnSorter.ListViewColumnSorter();
            this.tablaExpediciones.ListViewItemSorter = lvwColumnSorter;
            redimensiona(GestorVentanas.getInstancia().getWidthVentanaPrincipal(),
                        GestorVentanas.getInstancia().getHeightVentanaPrincipal());

            listaExpediciones = GestorConexion.getInstancia().getExpediciones();
            for (int i = 0; i < listaExpediciones.Count; i++)
            {
                ListViewItem item = new ListViewItem();
                Expedicion expedicion = listaExpediciones[i];
                item.Text = expedicion.getId().ToString();                
                item.SubItems.Add(expedicion.getCliente());
                item.SubItems.Add(expedicion.getFecha().ToString());
                tablaExpediciones.Items.Add(item);
            }
            double anchoCol1 = (tablaExpediciones.Width) * 0.25;
            double anchoCol2 = tablaExpediciones.Width * 0.50;

            tablaExpediciones.Columns[0].Width = (int)anchoCol1;
            tablaExpediciones.Columns[1].Width = (int)anchoCol2;
            tablaExpediciones.Columns[2].Width = (int)anchoCol1;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            cargarExpedicion();
        }

        private void cargarExpedicion()
        {
            if (tablaExpediciones.SelectedItems.Count == 0)
                return;
            ListViewItem itemSeleccionado = tablaExpediciones.SelectedItems[0];
            if (itemSeleccionado == null)
                return;
            Expedicion expedicion = obtenerExpedicionPorId(Convert.ToInt32(itemSeleccionado.Text));            
            ExpedicionPallets expPallets = obtenerExpedicionCompleta(expedicion);
            ControlLotes pantallaExpLotes = new ControlLotes();
            pantallaExpLotes.setExpedicion(expPallets);

            GestorVentanas.getInstancia().cambiarPantalla(pantallaExpLotes,  expedicion.getId().ToString(),  expedicion.getCliente(), expedicion.getFecha());
        }

        private ExpedicionPallets obtenerExpedicionCompleta(Expedicion expedicion)
        {
            return GestorConexion.getInstancia().getExpedicionPallets(expedicion);
        }

        private Expedicion obtenerExpedicionPorId(long id)
        {
            for (int i = 0; i < listaExpediciones.Count(); i++)
            {
                Expedicion exp = listaExpediciones.ElementAt(i);
                if (id == (exp.getId()))
                {
                    return exp;
                }
            }
            return null;
        }

        private void listView1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            cargarExpedicion();
        }

        public void redimensiona(int width, int height)
        {
           // this.Width = width - 20;
           // this.Height = height - 80;
           /* layoutPrincipal.Location = new Point(10, 10);
            layoutPrincipal.Width = width;
            layoutPrincipal.Height = Height - panel2.Height;
            
            tablaExpediciones.Location = new Point(0, 0);
            tablaExpediciones.Width = width - 28;
            tablaExpediciones.Height = layoutPrincipal.Height - botonAbrir.Height - 50;
            
            panel2.Width = tablaExpediciones.Width;
            */
            double anchoCol1 = (tablaExpediciones.Width) * 0.25;
            double anchoCol2 = tablaExpediciones.Width * 0.50;
            
            tablaExpediciones.Columns[0].Width = (int)anchoCol1;
            tablaExpediciones.Columns[1].Width = (int)anchoCol2;
            tablaExpediciones.Columns[2].Width = (int)anchoCol1;

        }

        private void listView1_ColumnClick(object sender, ColumnClickEventArgs e)
        {
            if (e.Column == lvwColumnSorter.SortColumn)
            {
                // Reverse the current sort direction for this column.
                if (lvwColumnSorter.Order == SortOrder.Ascending)
                {
                    lvwColumnSorter.Order = SortOrder.Descending;
                }
                else
                {
                    lvwColumnSorter.Order = SortOrder.Ascending;
                }
            }
            else
            {
                // Set the column number that is to be sorted; default to ascending.
                lvwColumnSorter.SortColumn = e.Column;
                lvwColumnSorter.Order = SortOrder.Ascending;
            }

            // Perform the sort with these new sort options.
            this.tablaExpediciones.Sort();

        }

        private void listView1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (tablaExpediciones.SelectedItems.Count > 0)
            {
                botonAbrir.Enabled = true;
                return;
            }
            botonAbrir.Enabled = false;
        }
    }
}
